{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "#导入必要的工具包\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn.cluster import MiniBatchKMeans\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn import metrics\n",
    "\n",
    "import time\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>event_id</th>\n",
       "      <th>user_id</th>\n",
       "      <th>start_time</th>\n",
       "      <th>city</th>\n",
       "      <th>state</th>\n",
       "      <th>zip</th>\n",
       "      <th>country</th>\n",
       "      <th>lat</th>\n",
       "      <th>lng</th>\n",
       "      <th>...</th>\n",
       "      <th>c_92</th>\n",
       "      <th>c_93</th>\n",
       "      <th>c_94</th>\n",
       "      <th>c_95</th>\n",
       "      <th>c_96</th>\n",
       "      <th>c_97</th>\n",
       "      <th>c_98</th>\n",
       "      <th>c_99</th>\n",
       "      <th>c_100</th>\n",
       "      <th>c_other</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>684921758</td>\n",
       "      <td>3647864012</td>\n",
       "      <td>2012-10-31T00:00:00.001Z</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>244999119</td>\n",
       "      <td>3476440521</td>\n",
       "      <td>2012-11-03T00:00:00.001Z</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>3928440935</td>\n",
       "      <td>517514445</td>\n",
       "      <td>2012-11-05T00:00:00.001Z</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>2582345152</td>\n",
       "      <td>781585781</td>\n",
       "      <td>2012-10-30T00:00:00.001Z</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>1051165850</td>\n",
       "      <td>1016098580</td>\n",
       "      <td>2012-09-27T00:00:00.001Z</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 111 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Unnamed: 0    event_id     user_id                start_time city state  \\\n",
       "0           0   684921758  3647864012  2012-10-31T00:00:00.001Z  NaN   NaN   \n",
       "1           1   244999119  3476440521  2012-11-03T00:00:00.001Z  NaN   NaN   \n",
       "2           2  3928440935   517514445  2012-11-05T00:00:00.001Z  NaN   NaN   \n",
       "3           3  2582345152   781585781  2012-10-30T00:00:00.001Z  NaN   NaN   \n",
       "4           4  1051165850  1016098580  2012-09-27T00:00:00.001Z  NaN   NaN   \n",
       "\n",
       "   zip country  lat  lng   ...     c_92  c_93  c_94  c_95  c_96  c_97  c_98  \\\n",
       "0  NaN     NaN  NaN  NaN   ...        0     1     0     0     0     0     0   \n",
       "1  NaN     NaN  NaN  NaN   ...        0     0     0     0     0     0     0   \n",
       "2  NaN     NaN  NaN  NaN   ...        0     0     0     0     0     0     0   \n",
       "3  NaN     NaN  NaN  NaN   ...        0     0     0     0     0     0     0   \n",
       "4  NaN     NaN  NaN  NaN   ...        0     0     0     0     0     0     0   \n",
       "\n",
       "   c_99  c_100  c_other  \n",
       "0     0      0        9  \n",
       "1     0      0        7  \n",
       "2     0      0       12  \n",
       "3     0      0        8  \n",
       "4     0      0        9  \n",
       "\n",
       "[5 rows x 111 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#读取训练数据\n",
    "train = pd.read_csv('./data/event_drop.csv')\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(13418, 111)\n"
     ]
    }
   ],
   "source": [
    "print train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Unnamed: 0        0\n",
       "event_id          0\n",
       "user_id           0\n",
       "start_time        0\n",
       "city           7092\n",
       "state          8868\n",
       "zip           12004\n",
       "country        7065\n",
       "lat            5356\n",
       "lng            5356\n",
       "c_1               0\n",
       "c_2               0\n",
       "c_3               0\n",
       "c_4               0\n",
       "c_5               0\n",
       "c_6               0\n",
       "c_7               0\n",
       "c_8               0\n",
       "c_9               0\n",
       "c_10              0\n",
       "c_11              0\n",
       "c_12              0\n",
       "c_13              0\n",
       "c_14              0\n",
       "c_15              0\n",
       "c_16              0\n",
       "c_17              0\n",
       "c_18              0\n",
       "c_19              0\n",
       "c_20              0\n",
       "              ...  \n",
       "c_72              0\n",
       "c_73              0\n",
       "c_74              0\n",
       "c_75              0\n",
       "c_76              0\n",
       "c_77              0\n",
       "c_78              0\n",
       "c_79              0\n",
       "c_80              0\n",
       "c_81              0\n",
       "c_82              0\n",
       "c_83              0\n",
       "c_84              0\n",
       "c_85              0\n",
       "c_86              0\n",
       "c_87              0\n",
       "c_88              0\n",
       "c_89              0\n",
       "c_90              0\n",
       "c_91              0\n",
       "c_92              0\n",
       "c_93              0\n",
       "c_94              0\n",
       "c_95              0\n",
       "c_96              0\n",
       "c_97              0\n",
       "c_98              0\n",
       "c_99              0\n",
       "c_100             0\n",
       "c_other           0\n",
       "Length: 111, dtype: int64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.isnull().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train = train.drop('user_id', axis = 1).drop('start_time', axis = 1).drop('city', axis = 1).drop('state', axis = 1).drop('zip', axis = 1).drop('country',axis=1).drop('lat',axis=1).drop('lng',axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>event_id</th>\n",
       "      <th>c_1</th>\n",
       "      <th>c_2</th>\n",
       "      <th>c_3</th>\n",
       "      <th>c_4</th>\n",
       "      <th>c_5</th>\n",
       "      <th>c_6</th>\n",
       "      <th>c_7</th>\n",
       "      <th>c_8</th>\n",
       "      <th>...</th>\n",
       "      <th>c_92</th>\n",
       "      <th>c_93</th>\n",
       "      <th>c_94</th>\n",
       "      <th>c_95</th>\n",
       "      <th>c_96</th>\n",
       "      <th>c_97</th>\n",
       "      <th>c_98</th>\n",
       "      <th>c_99</th>\n",
       "      <th>c_100</th>\n",
       "      <th>c_other</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>684921758</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>244999119</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>3928440935</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>2582345152</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>1051165850</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 103 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Unnamed: 0    event_id  c_1  c_2  c_3  c_4  c_5  c_6  c_7  c_8   ...     \\\n",
       "0           0   684921758    2    0    2    0    0    0    0    0   ...      \n",
       "1           1   244999119    2    0    2    0    0    0    0    0   ...      \n",
       "2           2  3928440935    0    0    0    0    0    0    0    0   ...      \n",
       "3           3  2582345152    1    0    2    1    0    0    0    0   ...      \n",
       "4           4  1051165850    1    1    0    0    0    0    0    2   ...      \n",
       "\n",
       "   c_92  c_93  c_94  c_95  c_96  c_97  c_98  c_99  c_100  c_other  \n",
       "0     0     1     0     0     0     0     0     0      0        9  \n",
       "1     0     0     0     0     0     0     0     0      0        7  \n",
       "2     0     0     0     0     0     0     0     0      0       12  \n",
       "3     0     0     0     0     0     0     0     0      0        8  \n",
       "4     0     0     0     0     0     0     0     0      0        9  \n",
       "\n",
       "[5 rows x 103 columns]"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train_part, X_val= train_test_split(X_train, train_size = 0.8,random_state = 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(10734, 103)\n",
      "(2684, 103)\n"
     ]
    }
   ],
   "source": [
    "print(X_train_part.shape)\n",
    "print(X_val.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "def K_cluster_analysis(K, X_train,X_val):\n",
    "    start = time.time()\n",
    "    \n",
    "    print(\"K-means begin with clusters: {}\".format(K));\n",
    "    \n",
    "    mb_kmeans = MiniBatchKMeans(n_clusters = K)\n",
    "    mb_kmeans.fit(X_train)\n",
    "    \n",
    "    CH_score = metrics.silhouette_score(X_train,mb_kmeans.predict(X_train))\n",
    "    \n",
    "    end = time.time()\n",
    "    print(\"CH_score:{}, time elaps:{}\".format(CH_score, int(end-start)))\n",
    "    \n",
    "    return CH_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "K-means begin with clusters: 10\n",
      "CH_score:0.540736937086, time elaps:7\n",
      "K-means begin with clusters: 20\n",
      "CH_score:0.527740140651, time elaps:7\n",
      "K-means begin with clusters: 30\n",
      "CH_score:0.522494046859, time elaps:7\n",
      "K-means begin with clusters: 40\n",
      "CH_score:0.52662357124, time elaps:7\n",
      "K-means begin with clusters: 50\n",
      "CH_score:0.51957428233, time elaps:7\n",
      "K-means begin with clusters: 60\n",
      "CH_score:0.519547983771, time elaps:8\n",
      "K-means begin with clusters: 70\n",
      "CH_score:0.523164395616, time elaps:8\n",
      "K-means begin with clusters: 80\n",
      "CH_score:0.519128643167, time elaps:8\n",
      "K-means begin with clusters: 90\n",
      "CH_score:0.520515235627, time elaps:9\n",
      "K-means begin with clusters: 100\n",
      "CH_score:0.516239717118, time elaps:9\n"
     ]
    }
   ],
   "source": [
    "Ks = [10,20,30,40,50,60,70,80,90,100]\n",
    "CH_scores = []\n",
    "for K in Ks:\n",
    "    ch = K_cluster_analysis(K,X_train_part,X_val)\n",
    "    CH_scores.append(ch)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f8d0f5c6210>]"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f8d06610490>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(Ks, np.array(CH_scores), 'b-')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由对CH_score的折线图分析可知，当聚类数目为40时，聚类的效果最好"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
